import instance from "./instance";
import $config from "@/config";
import md5 from "blueimp-md5";


import { message } from 'ant-design-vue';
//import { console } from "vuedraggable/src/util/helper";

import $tool from "./tool.js"

console.log(import.meta.env)




/*
 * ajax方法实现请求后台数据
 * @param  {Array}  path      链接地址
 * @param  {String} params    参数
 * @param  {String} success   成功
 * @param  {String} fail      失败
 * @return {Array}            请求数据结果
 */
export default function(path, params, success, fail,method) {
    //请求接口地址处理
    let baseUrl = import.meta.env.VITE_APP_API;
    const parameters={
        url:baseUrl + path+`?ts=${Date.now()}`,
        data:params || {},
        method:method || "POST",
        responseType: params.responseType || '',
    };
    /**
     * params是添加到url的请求字符串中的，用于get请求。
     * 而data是添加到请求体（body）中的， 用于post请求。
     */
    const dataRequest = ['PUT', 'POST', 'PATCH'];
    if (dataRequest.includes(method)) {
        parameters.data = params || {};
    } else {
        parameters.params = params || {};
    }

    // formData转换
    if (params.formData) {
        parameters.transformRequest = [data => {
            const formData = new FormData();
            if (data) {
                Object.entries(data).forEach(item => {
                    formData.append(item[0], item[1]);
                });
            }
            return formData;
        }];
    }

//签名字符串
 const secretKey=(res)=>{
    let params=res.data;
	if(params){
		params.appid=$config.appid; //应用id（小程序、H5、APP等分为不同的应用ID）
		params.nonce=Math.random().toString(36).slice(-10)+Math.random(1000*1000).toString().slice(-10)+Math.random().toString(36).slice(-10); //随机字符串
		params.timestamp = Date.parse(new Date()); //10位时间戳（单位：秒)
		let paramsTostring=$tool.objKeyValueTostring(params); //待签名字符串
		let token=md5($config.secret+paramsTostring+$config.secret)
        localStorage.setItem("appid", params.appid)
        localStorage.setItem("nonce", params.nonce)
        localStorage.setItem("timestamp", params.timestamp)
        localStorage.setItem("security-api-token", token) //签名(security-api-token)
		//delete params.secret; //删除签名参数secret
		delete params.appid; //删除签名参数appid
		delete params.nonce; //删除签名参数nonce
		delete params.timestamp; //删除签名参数timestamp
		return params;
        }else{
            return "";
        }
    }
    parameters.data= secretKey(parameters);//参数签名处理
    instance(parameters).then(response => {
        if (response.status === 200) {
            //只做成功处理--失败的请查看instance.js
            let data = response.data;
            if (parseInt(data.code)  === 200) {
                if (typeof success === "function") {
                    return success(data);
                }
            } else {
                if (fail && typeof fail === "function") {
                    return fail(data);
                }else{
                    message.info(data.message);
                }
            }
        }
    }).catch(err => {
        //使用catch方法和then的第二个参数的效果一样，但是它还有你另外一个作用,那就是在then的第一个resolve回调函数中代码出错，不用卡死js的执行，而是会进入到catch中，捕获err原因。
        console.log("err", err);
    });
}
